package com.xlh.service.impl;

import cn.hutool.core.io.FileUtil;
import com.xlh.enums.FileTypeEnum;
import com.xlh.exception.common.NotFoundException;
import com.xlh.service.MdHtmlFileService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.io.File;

/**
 * @author zhr 2019/3/11
 */
@Service
public class MdHtmlFileServiceImpl implements MdHtmlFileService {

    @Override
    public void writeAllFile(String content, String fileDir, String fileName) {
        // 写markdown文件
        writeFile(content, fileDir, fileName, FileTypeEnum.MARKDOWN);
        // 写html文件
        writeFile(content, fileDir, fileName, FileTypeEnum.HTML);
    }

    @Override
    public void writeAllFile(String mdContent, String htmlContent, String fileDir, String fileName) {
        // 写markdown文件
        writeFile(mdContent, fileDir, fileName, FileTypeEnum.MARKDOWN);
        // 写html文件
        writeFile(htmlContent, fileDir, fileName, FileTypeEnum.HTML);
    }

    @Override
    public void writeFile(String content, String fileDir, String fileName) {
        if (content == null) {
            content = "";
        }
        // 创建文件存放路径，如果目录已存在则不创建
        FileUtil.mkdir(fileDir);
        // 文件绝对地址
        String fileAbsolutePath = getFileAbsolutePath(fileDir, fileName);
        // 在文件绝对地址创建文件
        FileUtil.file(fileAbsolutePath);
        // 向文件中编辑内容
        FileUtil.writeUtf8String(content, fileAbsolutePath);
    }

    private void writeFile(String content, String fileDir, String fileName, FileTypeEnum fileTypeEnum) {
        // 获取完整文件名
        String fileFullName = getFileFullName(fileName, fileTypeEnum);
        // 创建文件存放路径，如果目录已存在则不创建
        FileUtil.mkdir(fileDir);
        // 文件绝对地址
        String fileAbsolutePath = getFileAbsolutePath(fileDir, fileFullName);
        // 在文件绝对地址创建文件
        FileUtil.file(fileAbsolutePath);

        // 向文件中编辑内容
        FileUtil.writeUtf8String(content, fileAbsolutePath);
    }

    private String getFileAbsolutePath(String fileDir, String fileName) {
        if (!fileDir.endsWith(File.separator)) fileDir += File.separator;
        fileDir = FileUtil.normalize(fileDir);
        return StringUtils.join(fileDir, fileName);
    }

    private String getFileFullName(String fileName, FileTypeEnum fileTypeEnum) {
        return StringUtils.join(fileName, fileTypeEnum.getExtension());
    }

    @Override
    public String readFile(String fileDir, String fileName) {
        try {
            return FileUtil.readString(getFileAbsolutePath(fileDir, fileName), "utf-8");
        } catch (Exception e) {
            throw new NotFoundException("资源不存在");
        }
    }
}
